package com.pox.guli.service.edu.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.pox.guli.service.base.dto.CourseDto;
import com.pox.guli.service.edu.entity.Course;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pox.guli.service.edu.entity.form.CourseInfoForm;
import com.pox.guli.service.edu.entity.vo.*;

import java.util.List;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author pox21s
 * @since 2022-06-01
 */
public interface CourseService extends IService<Course> {

    String saveCourseInfo(CourseInfoForm courseInfoForm);

    /**
     * 根据ID查询课程表单提交信息，用于数据回显
     * @param id 查询id
     * @return com.pox.guli.service.edu.entity.form.CourseInfoForm
     */
    CourseInfoForm getCourseInfoFormById(String id);

    /**
     * 更新课程表单提交信息
     * @param courseInfoForm 更新的表单目标
     */
    void updateCourseInfoById(CourseInfoForm courseInfoForm);

    /**
     * 课程信息分页查询
     * @param page 页数
     * @param limit 显示的个数
     * @param courseQueryVo 查询条件
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.pox.guli.service.edu.entity.vo.CourseVo>
     */
    IPage<CourseVo> selectPage(Long page, Long limit, CourseQueryVo courseQueryVo);

    /**
     * 删除课程 - 删除封面
     * @param id 课程id
     */
    boolean removeCoverById(String id);

    /**
     * 删除课程 - 删除课程信息及其相关
     * @param id 课程id
     * @return boolean 删除结果
     */
    boolean removeCourseById(String id);

    /**
     * 根据ID获取课程发布信息
     * @param id 课程id
     * @return com.pox.guli.service.edu.entity.vo.CoursePublishVo
     */
    CoursePublishVo getCoursePublishVoById(String id);

    /**
     * 根据ID发布课程
     * @param id 查询id
     * @return boolean
     */
    boolean publishCourseById(String id);

    /**
     * 课程列表查询
     * @param webCourseQueryVo 课程查询条件
     * @return java.util.List<com.pox.guli.service.edu.entity.Course>
     */
    List<Course> webSelectList(WebCourseQueryVo webCourseQueryVo);

    /**
     * 根据课程ID查询课程和讲师信息
     * @param courseId 课程id
     * @return com.pox.guli.service.edu.entity.vo.WebCourseVo
     */
    WebCourseVo selectWebCourseVoById(String courseId);

    /**
     * 获取首页热门课程
     * @return java.util.List<com.pox.guli.service.edu.entity.Course>
     */
    List<Course> selectHotCourse();

    /**
     * 通过订单查询课程信息
     * @param courseId 课程id
     * @return com.pox.guli.service.base.dto.CourseDto
     */
    CourseDto getCourseDtoById(String courseId);

    /**
     * 根据课程ID更新课程销量
     * @param id 课程id
     */
    void updateBuyCountById(String id);
}
